class Query {
  /**
   * @param {object} geom 通过交互式的画笔拿到的对象type='box'
   * @param {object} service {docName,layerId}
   */
  /* 封装的基于几何图形查询 */
  static queryByGeom({ geom, service, callback }) {
    var queryStruct = new Zondy.Service.QueryFeatureStruct()
    //是否包含几何图形信息
    queryStruct.IncludeGeometry = true
    //是否包含属性信息
    queryStruct.IncludeAttribute = true
    //是否包含图形显示参数
    queryStruct.IncludeWebGraphic = false
    //2、创建一个用于查询的区,根据画布创建的几何图形进行查询
    var geomObj = new Zondy.Object.Polygon()
    geomObj.setByOL(geom)
    //3、设置查询参数
    var rule = new Zondy.Service.QueryFeatureRule({
      //是否将要素的可见性计算在内
      EnableDisplayCondition: false,
      //是否完全包含
      MustInside: false,
      //是否仅比较要素的外包矩形
      CompareRectOnly: false,
      //是否相交
      Intersect: true,
    })
    //实例化查询参数对象
    var queryParam = new Zondy.Service.QueryParameter({
      geometry: geomObj,
      resultFormat: "json",
      struct: queryStruct,
      rule: rule,
    })
    queryParam.pageIndex = 0
    //设置查询要素数目
    queryParam.recordNumber = 1000
    //4、调用服务,实现查询
    var queryService = new Zondy.Service.QueryDocFeature(
      queryParam,
      service.docName,
      service.layerId,
      {
        ip: "localhost",
        port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
      }
    )
    //执行查询操作，querySuccess为查询回调函数
    queryService.query(callback)
  }
  /* 根据属性查询 核心where */
  static queryByAttr({ where, service, callback }) {
    //2-1、初始化查询结构对象，设置查询结构包含几何信息
    var queryStruct = new Zondy.Service.QueryFeatureStruct()
    //是否包含几何图形信息
    queryStruct.IncludeGeometry = true
    //是否包含图形显示参数
    queryStruct.IncludeWebGraphic = true
    //2、实例化查询参数对象
    var queryParam = new Zondy.Service.QueryParameter({
      resultFormat: "json",
      struct: queryStruct,
    })
    //3、设置属性条件
    queryParam.where = where
    //4、实例化地图文档查询服务对象
    var queryService = new Zondy.Service.QueryDocFeature(
      queryParam,
      service.name,
      service.layerId,
      {
        ip: "localhost",
        port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
      }
    )
    //执行查询操作，querySuccess为查询回调函数
    queryService.query(callback)
  }
  // 查询线图层的所有要素，最大数目设置为1000
  static queryLines({ service, callback }) {
    // 1 初始化查询结构对象，设置查询结构包含几何信息
    var queryStruct = new Zondy.Service.QueryFeatureStruct()
    // console.log(queryStruct)
    //{IncludeAttribute: true, IncludeGeometry: false, IncludeWebGraphic: false}
    queryStruct.IncludeGeometry = true // 默认为false  就不查询几何信息
    queryStruct.IncludeWebGraphic = true // 默认为false  不查询样式信息
    //是否包含属性信息
    queryStruct.IncludeAttribute = true
    // 3 实例化查询参数对象  查询规则
    var queryParam = new Zondy.Service.QueryParameter({
      resultFormat: "json",
      struct: queryStruct,
    })
    //设置查询分页号
    queryParam.pageIndex = 0
    //设置查询要素数目
    queryParam.recordNumber = 1000
    // 4 实例化地图文档查询服务对象
    var queryService = new Zondy.Service.QueryDocFeature(
      queryParam,
      service.docName,
      service.layerId,
      {
        ip: "localhost",
        port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
      }
    )
    //执行查询操作，querySuccess为查询成功回调函数
    queryService.query(callback)
  }
  /* 查询居民区 即区图层  的所有要素 */
  static queryAreas({ service, callback }) {
    // 1 初始化查询结构对象，设置查询结构包含几何信息
    var queryStruct = new Zondy.Service.QueryFeatureStruct()
    //{IncludeAttribute: true, IncludeGeometry: false, IncludeWebGraphic: false}
    queryStruct.IncludeGeometry = true // 默认为false  就不查询几何信息
    queryStruct.IncludeWebGraphic = true // 默认为false  不查询样式信息
    //是否包含属性信息
    queryStruct.IncludeAttribute = true
    // 3 实例化查询参数对象  查询规则
    var queryParam = new Zondy.Service.QueryParameter({
      resultFormat: "json",
      struct: queryStruct,
    })
    //设置查询分页号
    queryParam.pageIndex = 0
    //设置查询要素数目
    queryParam.recordNumber = 1000
    // 4 实例化地图文档查询服务对象
    var queryService = new Zondy.Service.QueryDocFeature(
      queryParam,
      service.docName,
      service.layerId,
      {
        ip: "localhost",
        port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
      }
    )
    //执行查询操作，querySuccess为查询成功回调函数
    queryService.query(callback)
  }
  /* 通过url查询要素 */
  static querybygdbUrl(url, callback) {
    //初始化查询结构对象，设置查询结构包含几何信息
    const queryStruct = new Zondy.Service.QueryFeatureStruct()
    queryStruct.IncludeGeometry = true
    //实例化查询参数对象
    const queryParam = new Zondy.Service.QueryByLayerParameter(url, {
      resultFormat: "json",
      struct: queryStruct,
    })
    queryParam.where = "1>0"
    //实例化地图文档查询服务对象
    const queryService = new Zondy.Service.QueryLayerFeature(queryParam, {
      ip: "localhost",
      port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
    })
    //执行查询操作，callback为查询回调函数
    queryService.query(callback)
  }
}

export { Query }
